package top;

/**
 * @author lakersUp
 * @Classname       两数相除
 * @Description
 * @Date 2022/4/6 11:02
 * @Version 1.0
 */
public class Top29divide {
    public int divide(int dividend, int divisor) {
        if (dividend == Integer.MIN_VALUE && divisor == -1) {
            return Integer.MAX_VALUE;
        }
        if(dividend == 0 || divisor == 0) return 0;
        int less = 0;//判断大于0的个数，用于判断商的符号
        // int t = divisor;
        //int的范围为-2^32 ～ 2^32-1，负数的范围较大，因此全部转为负数来计算
        if(dividend > 0){
            less++;
            dividend = -dividend;
        }
        if(divisor > 0){
            less++;
            divisor = -divisor;
        }
        //如果除数大于被除数，则直接返回0
        if(dividend > divisor) return 0;
        int result = 0;
        int t=dividend,d=divisor;
        for (int i=31; i>=0;i--) {
            if ((t>>i)>=d) {//找出足够大的数2^n*divisor
                result+=1<<i;//将结果加上2^n
                t-=d<<i;//将被除数减去2^n*divisor
            }
        }
        return less==1?-result:result;
    }
}
